import axios from 'axios'
import { getToken, removeToken, removeUserId } from './localData'
import router from '../router/index'

// Dialog 弹出框
import { Dialog } from 'vant'
// import router from '../router'

// axios.defaults.baseURL = "http://157.122.54.189:9083"
axios.defaults.baseURL = "http://127.0.0.1:3000"

// 添加请求拦截器  - axios 发送请求前自动执行的一个函数而已
// interceptors 拦截器
// request 请求
axios.interceptors.request.use(
    // config 就是请求时的配置
    (config) => {
        // 在发送请求之前做些什么
        // 获取本地存储的 token
        const token = getToken()
        // 如果有 token 就添加到请求头中
        if (token) {
            config.headers.Authorization = token
        }
        // console.log('axios请求发送前，调用了这个函数',config)
        // 返回修改后的配置
        return config
    },
    (error) => {
        // 对请求错误做些什么，表示失败把error 传递给 catch()
        return Promise.reject(error)
    }
)
// 添加响应拦截器
axios.interceptors.response.use(
    (response) => {
        // console.log('服务器响应数据后，axios 会自动调用的函数', response);
        if (response.data.message === '用户信息验证失败') {
            // 失败的原因可能是未登录，或者登录过期了，
            // 1.删除已过期的用户信息
            removeToken()
            removeUserId()
            Dialog.confirm({
                title: '用户认证失败',
                message: '需要登录后再操作',
                confirmButtonText: '去登录',
                cancelButtonText: '残忍拒绝'
            }).then(() => {
                // on confirm
                // 把跳转前的页面地址存储起来
                const from = location.href
                console.log('去登陆前的页面', { from });
                router.push({
                    // query 会显示在地址栏上，会转义成百分比编码，有问题
                    // pth 和 params 是冲突的
                    // path:'/login'
                    name: 'Login',
                    params: {
                        // 把跳转前的页面，存储到页面的 params 中
                        // 注意点：params 不写占位符，就不会显示到地址栏中，但是可以被 JS 访问到
                        from: from
                    }
                })
            }).catch(() => {
                // on cancel
            })
        }
        return response
    },
    (error) => Promise.reject(erroe)
)
export default axios